build: Enable subdir-objects
authorEmmanuele Bassi <ebassi@gnome.org>
Wed, 19 Oct 2016 14:21:03 +0000 (15:21 +0100)
committerEmmanuele Bassi <ebassi@gnome.org>
Wed, 19 Oct 2016 14:26:24 +0000 (15:26 +0100)
Newer versions of Automake warn about forward compatibility when the
build uses sources in sub-directories without the subdir-objects option.

Both GTK+ and GDK have an almost-but-not-quite non-recursive Automake
layout, with sources in sub-directories contributing to the build of a
top-level object.

In theory, just adding subdir-objects to AM_INIT_AUTOMAKE would be
enough, but the test suite references sources in a different top-level
in order to build tests that verify the implementation of private data
structures. This is not really allowed when using subdir-objects and out
of srcdir builds. In order to fix this case, we require some ad hoc
rules to create symbolic links in the appropriate build directory.

configure.ac
testsuite/gtk/Makefile.am

index 3d5cb6e57fc78b4371215bf40c5a4dff2c93425d..f93c2d39441e7335fe9e270358d48489513da884 100644 (file)
@@ -82,7 +82,7 @@ AC_SUBST(INTROSPECTION_REQUIRED_VERSION)
 # Save this value here, since automake will set cflags later
 cflags_set=${CFLAGS+set}
 
-AM_INIT_AUTOMAKE([1.11 -Wall no-define -Wno-portability tar-ustar no-dist-gzip dist-xz])
+AM_INIT_AUTOMAKE([1.14 subdir-objects -Wall no-define -Wno-portability tar-ustar no-dist-gzip dist-xz])
 AM_MAINTAINER_MODE([enable])
 
 # Support silent build rules. Disable
index 0ea22f305d18b96d20107ae9e0e175bab0d8ba72..b0a487fdcffe81abaa27b6f499985b0b9b3b27d6 100644 (file)
@@ -24,6 +24,9 @@ LDADD = \
        $(top_builddir)/gdk/libgdk-4.la \
        $(GTK_DEP_LIBS)
 
+CLEANFILES =
+BUILT_SOURCES =
+
 noinst_PROGRAMS = $(TEST_PROGS)
 
 TESTS_ENVIRONMENT = \
@@ -114,19 +117,26 @@ rbtree_CFLAGS  = -DGTK_COMPILATION -UG_ENABLE_DEBUG
 rbtree_LDADD = $(GTK_DEP_LIBS)
 rbtree_SOURCES =                       \
        rbtree.c                        \
-       $(top_srcdir)/gtk/gtkrbtree.h   \
-       $(top_srcdir)/gtk/gtkrbtree.c   \
+       gtkrbtree.c                     \
        $(NULL)
 
+gtkrbtree.c: $(top_srcdir)/gtk/gtkrbtree.c
+       $(AM_V_GEN) $(LN_S) $^ $@
+
+CLEANFILES += gtkrbtree.c
+
 bitmask_CFLAGS  = -DGTK_COMPILATION -UG_ENABLE_DEBUG
 bitmask_LDADD = $(GTK_DEP_LIBS)
-bitmask_SOURCES =                                      \
-       bitmask.c                                       \
-       $(top_srcdir)/gtk/gtkbitmaskprivate.h           \
-       $(top_srcdir)/gtk/gtkallocatedbitmaskprivate.h  \
-       $(top_srcdir)/gtk/gtkallocatedbitmask.c         \
+bitmask_SOURCES =                      \
+       bitmask.c                       \
+       gtkallocatedbitmask.c           \
        $(NULL)
 
+gtkallocatedbitmask.c: $(top_srcdir)/gtk/gtkallocatedbitmask.c
+       $(AM_V_GEN) $(LN_S) $^ $@
+
+CLEANFILES += gtkallocatedbitmask.c
+
 keyhash_CFLAGS =                                       \
        -DGTK_COMPILATION                               \
        -DGTK_LIBDIR=\"$(libdir)\"                      \
@@ -135,16 +145,23 @@ keyhash_CFLAGS =                                  \
        -DGTK_SYSCONFDIR=\"$(sysconfdir)\"              \
        $(NULL)
 
-keyhash_SOURCES        =                                       \
-       keyhash.c                                       \
-       $(top_srcdir)/gtk/gtkkeyhash.c                  \
-       $(top_srcdir)/gtk/gtkkeyhash.h                  \
-       $(top_builddir)/gtk/gtkresources.c              \
-       $(top_builddir)/gtk/gtkresources.h              \
-       $(top_srcdir)/gtk/gtkprivate.c                  \
-       $(top_srcdir)/gtk/gtkprivate.h                  \
+keyhash_SOURCES        =               \
+       keyhash.c               \
+       gtkkeyhash.c            \
+       gtkresources.c          \
+       gtkprivate.c            \
        $(NULL)
 
+gtkkeyhash.c: $(top_srcdir)/gtk/gtkkeyhash.c
+       $(AM_V_GEN) $(LN_S) $^ $@
+
+gtkresources.c: $(top_builddir)/gtk/gtkresources.c
+       $(AM_V_GEN) $(LN_S) $^ $@
+
+gtkprivate.c: $(top_srcdir)/gtk/gtkprivate.c
+       $(AM_V_GEN) $(LN_S) $^ $@
+
+CLEANFILES += gtkkeyhash.c gtkresources.c gtkprivate.c
 
 test_icontheme =                                       \
        icons/index.theme                               \
@@ -253,9 +270,8 @@ GTK_GSETTINGS_SCHEMAS = \
        $(top_srcdir)/gtk/org.gtk.Settings.FileChooser.gschema.xml \
        $(NULL)
 
-BUILT_SOURCES = gschemas.compiled
-
-CLEANFILES = gschemas.compiled
+BUILT_SOURCES += gschemas.compiled
+CLEANFILES += gschemas.compiled
 
 gschemas.compiled: $(GTK_GSETTINGS_SCHEMAS)
        $(AM_V_GEN) $(GLIB_COMPILE_SCHEMAS) \